#ifndef SHMLIB
#define SHMLIB 1

/* CI_FB: außer stdio.h errno.h und string.h sollten alle anderen ausgelagert werden */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <limits.h>
#include <sem182.h>

/* return values */
#define ERROR	-1
#define OKAY	0

/* Process identifier */
#define RECEIVER 1
#define SENDER 0

/* Semaphore and shared memory keys */
#define SEM_W_KEY 1835000
#define SEM_R_KEY 1835001
#define SHM_KEY 1835002


extern int CheckParams(const int argc, char* argv[]);
extern int InitResources(const int sem_type, const int buffersize);
/* CI_FB: Funktion wird nur intern verwendet */
extern int CreateSemaphore (const int sem_key_id, const int sem_count);
/* CI_FB: Funktion wird nur intern verwendet */
extern int CreateSharedMemory (const int BufferSize);
/* CI_FB: Funktion wird nur intern verwendet */
extern int AttachSharedMemory (const int shm_mode);
/* CI_FB: Funktion wird nur intern verwendet */
/* CI_FB: Funktionen ohne Paramter haben die Parameterliste (void) */
extern int DetachSharedMemory ();
/* CI_FB: Funktion wird nur intern verwendet */
extern int RemoveSemaphore(const int sem_type);
/* CI_FB: Funktion wird nur intern verwendet */
/* CI_FB: Funktionen ohne Paramter haben die Parameterliste (void) */
extern int RemoveSharedMemory ();
/* CI_FB: Funktion wird nur intern verwendet */
extern int clean_up(int process);
/* CI_FB: Funktionen ohne Paramter haben die Parameterliste (void) */
extern int WaitForSemaphore();
/* CI_FB: Funktionen ohne Paramter haben die Parameterliste (void) */
extern int SignalToSemaphore();
extern void WriteToSharedMemory(int input_sign);
/* CI_FB: Funktionen ohne Paramter haben die Parameterliste (void) */
extern int ReadFromSharedMemory();
extern void printerror(char * message);
extern void handle_errno(char * message);
extern void printerrno (char * message);

#endif
